昨日介紹了 Pod,但有一個最重要的觀念未提及到,也就是 Pod 是 ephemeral
的資源,Ephemeral 中文譯為"短暫的",這是因為 Pod 容易因自身失敗或所待的 Node 發生故障或某種原因而被刪除、替換,然而真正上線產品幾乎無法容許短暫的失敗,因此 Kubernetes 有一另種資源,可以維持一定數量的 Pod 存活。
ReplicaSet 一樣由設定檔定義,包括由 selector 指定如何識別可取得的 Pod、replicas 表示需要維護多少副本,以及當 Replicaset 需要建立新 Pod 時,會以 template 中所定義的模板去 Create。
以下為官網 ReplicaSet yaml file example,其中黃圈及代表 該 Pod 的副本數量,即有 3 個一模一樣的 Pod,而紅框則是指定 Pod 的模板,也就是要以什麼樣的規格、要 run 甚麼 container 在該 Pod 中,並以此作為基礎再行複製。
官方不建議單使用 Replicaset,建議搭配 Deployment
如何使用 ReplicaSet?
官方會建議搭配 Deployment 此資源一起使用 Replicaset,是因為很多時候產品不是只要有副本即可解決所有問題,舉凡像是若是有滾動式更新(rolling update)的需求,則只有在 Deployment 上有支援,除此之外,Deployment還支援更多好用的功能,因此官方建議非必要不要單獨使用 ReplicaSet,而是使用 Deployment 取代,並將 ReplicaSet 的資訊設定到 Deployment 的 spec 中。
後續在了解 Kubernetes API 時,需要對下列名詞 Group、Version、Kind 以及 Resource 有個概念,會更容易理解各個部份所代表的意涵。
$ kubectl api-versions
# list all versions
# Output may like below
---------
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
batch/v1
$ kubectl api-resources
# list all resources
# Output may like below
---------
NAME SHORTNAMES APIVERSION NAMESPACED KIND
pods po v1 true Pod
services svc v1 true Service
apiservices apiregistration.k8s.io/v1 false APIService
deployments deploy apps/v1 true Deployment
replicasets rs apps/v1 true ReplicaSet
OK. 今天先醬囉~
Age wrinkles the body. Quitting wrinkles the soul.
共勉之